# -*- coding: utf-8 -*-
import scrapy
from scrapy.linkextractors import LinkExtractor
from firstscrapy.matplotlib_py.matplotlib_py.items import MatplotlibPyItem


class ExampleSpider(scrapy.Spider):
    name = 'examples'
    allowed_domains = ['matplotlib.org']#设置allowed_domains的含义是过滤爬取的域名，在插件OffsiteMiddleware启用的情况下（默认是启用的），不在此允许范围内的域名就会被过滤，而不会进行爬取
    start_urls = ['http://matplotlib.org/examples/index.html']

    def parse(self, response):
        xpath = '//div[@class="toctree-wrapper compound"]'
        le = LinkExtractor(restrict_xpaths=xpath)#restrict_xpaths：接收一个xpath的表达式，提取表达式选中区域的链接
        url_list = [link.url for link in le.extract_links(response)]#调用LinkExtractor对象的extract_links方法传入一个Response对象，该方法依据创建对象时所描述的提取规则，
#在Response对象所包含的页面中提取链接，最终返回一个列表，其中的每一个元素都是一个Link对象，即提取到的一个链接
        #这句代码即是创建一个列表然后将link对象里面的link.url即链接存在列表里面
        for url in url_list:
            yield scrapy.Request(url,callback=self.parse_detaile_page)#请求后将方法返回到parse_detail_page函数里面去执行

    def parse_detaile_page(self,response):
        xpath='//a[@class="reference external"]'
        le = LinkExtractor(restrict_xpaths=xpath)
        download_url = le.extract_links(response)[0].url
        item = MatplotlibPyItem()
        item["file_urls"] = [download_url]
        yield item
